#pragma once

#include "../interface/Socket.h"

namespace network {

    class ServerConnection : public Socket {

    public:

        /**
          * @brief  默认构造一个服务端连接对象
          */
        ServerConnection() : Socket(Socket::createSocket()) {}

        explicit ServerConnection(int fd) : Socket(fd) {}

        /**
          * @brief  设置服务端套接字端口是否可重用
          * @param  on 是否开启 默认为true开启
          * @retval 是否开启成功
          */
        bool setPortReuable(bool on = true) const;

        /**
          * @brief  将该服务端套接字对象与本机的指定端口绑定
          * @note   这里会直接修改Address的IP为服务端本机IP
          * @retval 是否成功绑定
          */
        bool bind();

        /**
          * @brief  服务端开启监听绑定好的端口
          * @param  backlog 参数为等待队列最大长度 默认为128
          * @retval 是否成功监听
          */
        bool listen(int backlog = 128) const;

        /**
          * @brief  接接受客户端的连接
          * @note   accpet失败将会产生runtime_error异常
          * @retval 新建立连接的客户端Socket对象
          */
        Socket accept();

    };

}
